package com.neusoft.neuiotms.dcam.fixed.dto;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.validator.constraints.Length;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.neusoft.bizcore.web.dto.AbstractAuditDTO;
import com.neusoft.neuiotms.dcam.common.dto.LocationDTO;
import com.neusoft.neuiotms.dcam.fixed.model.Asset;
import com.neusoft.neuiotms.dcam.fixed.model.enums.InventoryDutyStatus;
import com.neusoft.neuiotms.dcam.fixed.model.enums.InventoryPlanStatus;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class InventoryDutyDTO extends AbstractAuditDTO {

    private static final long serialVersionUID = 1L;

    /** 任务名称 */
    private String name;

    /** 盘点任务编码 */
    private String code;

    /** 任务状态 */
    private InventoryDutyStatus status = InventoryDutyStatus.created;

    /** 关联位置 */
    List<LocationDTO> locations = new ArrayList<>();

    /** 关联位置编码数组（新建任务时候，接口传递过来的位置编码） */
    private List<String> locationCodes = new ArrayList<>();

    /** 关联类型 */
    List<AssetTypeDTO> assetTypes = new ArrayList<>();

    /** 类型编码（新建任务时候，接口传递过来的） */
    private List<String> assetTypeCodes = new ArrayList<>();

    /** 关联部门 */
    List<ConnectionRelationDTO> orgRelation = new ArrayList<>();

    /** 部门ID（新建任务时候，接口传递过来的） */
    private List<String> orgCodes = new ArrayList<>();

    /** 部门名称（新建任务时候，接口传递过来的） */
    private List<String> orgNames = new ArrayList<>();

    /** 盘点人（冗余？） */
    private List<String> accountCodes = new ArrayList<>();
    /** 盘点人（冗余？） */
    private List<String> accountNames = new ArrayList<>();

    /** 盘点人 */
    private String account;

    /** 盘点人姓名 */
    @Length(max = 255, message = "使用人不能超过{max}位")
    private String userName;

    //TODO: 有用？
    List<Long> assetIdArr = new ArrayList<>();

    /** 关联盘点结果 */
    List<InventoryResultDTO> dutyResults = new ArrayList<>();
    List<InventoryResultTemporaryDTO> dutyResultsTem = new ArrayList<>();
    /** 盘点资产总数 */
    long dutyResultCount = 0;
    long dutyResultWaitCount = 0;
    long dutyResultDoneCount = 0;

    /** 计划ID */
    private Long inventoryPlanId;
    /** 计划名称 */
    private String inventoryPlanName;
    /** 计划编码 */
    private String inventoryPlanCode;

    /** 创建人 */
    private String inventoryPlanCreateUser;
    /** 计划开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date inventoryPlanStartDate;
    /** 计划结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date inventoryPlanEndDate;

    /** 计划状态 */
    private InventoryPlanStatus inventoryPlanStatus;
    /** 盘点方式 */
    private String type;

    private List<Asset> assetsData;

    private String differentTypes;

    //给前台刷新table用
    private int dutyResultsFlg;
}
